
const { resolve } = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

/* 
    
*/

module.exports = {
    entry: './src/js/index.js',
    output: {
        filename: 'js/[name].js',
        path: resolve(__dirname, 'build'),
    },
    module: {
        rules: [
            // loader 配置
            {
                test: /\.css$/,
                // 多个loader用use
                use: ['style-loader', 'css-loader']
            },
            {
                test: /\.js$/,
                // 排除node_modules下的js文件
                exclude: /node_modules/,
                // 只检查src下的js文件
                include: resolve(__dirname, 'src'),
                // 优先执行
                enforce: 'pre',
                // 延后执行
                // enforce: 'post',
                // 单个用loader
                loader: 'eslint-loader'
            },
            {
                // 以下配置只会匹配生效一个
                oneOf: [

                ]
            }
        ]
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: './src/index.html'
        })
    ],
    mode: 'development',
    // 解析模块规则
    resolve: {
        // 配置解析模块路径别名： 
        //   优点：简写路径
        //   缺点：写路径没有提示
        alias: {
            $css: resolve(__dirname, 'src/css')
        },
        // 配置省略文件路径的后缀名
        extensions: ['.js', '.jsx', '.json'],
        // 告诉webpack解析模块是去找哪个目录
        modules: [resolve(__dirname, '../../node_modules'), 'node_modules']
    },
    devServer: {
        // 监视的目录
        watchFiles: resolve(__dirname, 'build'),
        watchOptions: {
            // 忽略的文件
            ignored: /node_modules/
        },
        // 启动gzip压缩
        compress: true,
        // 域名
        host: 'localhost',
        // 端口号
        port: 5000,
        // 自动打开浏览器
        open: true,
        // 开启HMR功能
        hot: true,
        // 不要显示启动服务器日志信息
        clientLogLevel: 'none',
        // 除了一些基本启动信息以外，其他内容都不要显示
        quiet: true,
        // 如果出现错误，不要全屏提示
        overlay: false,
        // 服务器代理 --> 解决开发环境下跨域问题
        proxy: {
            // 一旦devServer(5000)服务器接收到/api/xxx的请求，就会把请求转发到另外一个服务器(3000)
            '/api': {
                target: 'http://localhost:3000'
            },
            // 发送请求，请求路径重写：将/api/xxx --> /xxx(去掉/api)
            pathRewrite: {
                '^/api': ''
            }
        }
    }
}